A computer system may be divided into three basic blocks: a central processing unit (CPU), memory, and input/output (I/O) units. These blocks are coupled to each other by a bus. An input device, such as a keyboard, mouse, stylus, analog-to-digital converter, etc., is used to input instructions and data into the computer system via an I/O unit. These instructions and data can be stored in memory. The CPU receives the data stored in the memory and processes the data as directed by a set of instructions. The results can be stored back into memory or outputted via an I/O unit to an output device, such as a printer, cathode-ray tube (CRT) display, digital-to-analog converter, etc.
Traditionally, several I/O bus standards have evolved that specify protocols and interfaces for interfacing peripheral devices. These standards include ISA, EISA and other I/O bus standards. Recently, a new I/O bus standard has been introduced for use as a primary I/O bus which provides a much greater bandwidth than previously existing bus standards. The peripheral component interconnect (PCI) bus is quickly receiving wide acceptance in the computer industry. The PCI bus standard provides for high bandwidth and flexibility that is independent of new processor technologies and increased processor speed. At this time, computer system architects are designing peripherals such as graphics, accelerators and SCSI disc drive controllers to be utilized with a PCI bus.
Generally, computer systems designed today that incorporate PCI bus capabilities also include a slower, secondary I/O bus, such as the ones described above, for compatibility with numerous existing, previously designed peripheral devices. However, there are a number of differences between the PCI bus standard and previously I/O bus standards which make difficult interfacing peripheral devices designed for the earlier I/O bus standards to the PCI bus. Even so, many of these peripheral devices are still desired by computer users. Therefore, it is desirable to include or to be able to incorporate these existing peripheral devices that are designed to interface with older bus standards into a system that has a PCI bus.
When performing bus transactions in a typical bus or multi-bus system, a master generates a bus transaction and sends it out on a bus. Agents on the bus perform a decoding operation on the address of the transaction to determine if the bus transaction is targeted to them (i.e., to determine if they are the target agent). If it is determined that a particular agent is the targeted device, then that agent claims the transaction. These types of agents are referred to herein as positive decode agents because they must decode the address of a bus transaction to determine ownership of that particular bus transaction.
The PCI bus standard specification specifies that one agent on the bus may actually claim transactions without determining ownership of the bus. This agent is referred to herein as a subtractive decode agent. After all of the positive decode agents on the bus have decoded the address of a transaction and determined that they do not own the transaction, the subtractive decode agent automatically claims ownership of the transaction.
Subtractive decode agents may be bus bridges that interface the PCI bus to a bus operating according to a standard or set of protocols different than that associated with the PCI bus. Because the PCI bus standard only allows one subtractive decode agent on the bus, a computer system that incorporates a subtractive decode agent as a bus bridge limits the number of non-PCI buses that may be supported. That is, a computer system that incorporates a standard bus, such as a PCI bus, is very limited in the number of buses operating according to different standards and protocols that may be added. It is desirable to be able to have a computer system that incorporates a PCI or other standard bus with more than one bus of a different standard.
The present invention overcomes these limitations of the prior art and provides for allowing multiple non-standard buses to interface with the standard bus in a computer system.